<?php
// +----------------------------------------------------------------------
// | TOPThink [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2013 http://topthink.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
namespace Think\Storage\Driver;

use Think\Storage;
// 本地文件写入存储类
class File extends Storage {
	private $contents = array ();
	
	/**
	 * 架构函数
	 * 
	 * @access public
	 */
	public function __construct() {
	}
	
	/**
	 * 文件内容读取
	 * 
	 * @access public
	 * @param string $filename
	 *        	文件名
	 * @return string
	 */
	public function read($filename, $type = '') {
		return $this->get ( $filename, 'content', $type );
	}
	
	/**
	 * 文件写入
	 * 
	 * @access public
	 * @param string $filename
	 *        	文件名
	 * @param string $content
	 *        	文件内容
	 * @return boolean
	 */
	public function put($filename, $content, $type = '') {
		$dir = dirname ( $filename );
		if (! is_dir ( $dir ))
			mkdir ( $dir, 0755, true );
		if (false === file_put_contents ( $filename, $content )) {
			E ( L ( '_STORAGE_WRITE_ERROR_' ) . ':' . $filename );
		} else {
			$this->contents [$filename] = $content;
			return true;
		}
	}
	
	/**
	 * 文件追加写入
	 * 
	 * @access public
	 * @param string $filename
	 *        	文件名
	 * @param string $content
	 *        	追加的文件内容
	 * @return boolean
	 */
	public function append($filename, $content, $type = '') {
		if (is_file ( $filename )) {
			$content = $this->read ( $filename, $type ) . $content;
		}
		return $this->put ( $filename, $content, $type );
	}
	
	/**
	 * 加载文件
	 * 
	 * @access public
	 * @param string $filename
	 *        	文件名
	 * @param array $vars
	 *        	传入变量
	 * @return void
	 */
	public function load($_filename, $vars = null) {
		if (! is_null ( $vars ))
			extract ( $vars, EXTR_OVERWRITE );
		include $_filename;
	}
	
	/**
	 * 文件是否存在
	 * 
	 * @access public
	 * @param string $filename
	 *        	文件名
	 * @return boolean
	 */
	public function has($filename, $type = '') {
		return is_file ( $filename );
	}
	
	/**
	 * 文件删除
	 * 
	 * @access public
	 * @param string $filename
	 *        	文件名
	 * @return boolean
	 */
	public function unlink($filename, $type = '') {
		unset ( $this->contents [$filename] );
		return is_file ( $filename ) ? unlink ( $filename ) : false;
	}
	
	/**
	 * 读取文件信息
	 * 
	 * @access public
	 * @param string $filename
	 *        	文件名
	 * @param string $name
	 *        	信息名 mtime或者content
	 * @return boolean
	 */
	public function get($filename, $name, $type = '') {
		if (! isset ( $this->contents [$filename] )) {
			if (! is_file ( $filename ))
				return false;
			$this->contents [$filename] = file_get_contents ( $filename );
		}
		$content = $this->contents [$filename];
		$info = array (
				'mtime' => filemtime ( $filename ),
				'content' => $content 
		);
		return $info [$name];
	}
}
